// package com.szh.gateway.exec;
//
//
// import lombok.extern.slf4j.Slf4j;
// import org.springframework.boot.autoconfigure.web.ErrorProperties;
// import org.springframework.boot.autoconfigure.web.WebProperties;
// import org.springframework.boot.autoconfigure.web.reactive.error.DefaultErrorWebExceptionHandler;
// import org.springframework.boot.web.error.ErrorAttributeOptions;
// import org.springframework.boot.web.reactive.error.ErrorAttributes;
// import org.springframework.context.ApplicationContext;
// import org.springframework.http.HttpStatus;
// import org.springframework.web.reactive.function.server.*;
//
// import java.util.HashMap;
// import java.util.Map;
// import java.util.Optional;
//
// @Slf4j
// public class JsonExceptionHandler extends DefaultErrorWebExceptionHandler {
//     public JsonExceptionHandler(ErrorAttributes errorAttributes, WebProperties resourceProperties, ErrorProperties errorProperties, ApplicationContext applicationContext) {
//         super(errorAttributes, resourceProperties.getResources(), errorProperties, applicationContext);
//     }
//
//     @Override
//     protected Map<String, Object> getErrorAttributes(ServerRequest request, ErrorAttributeOptions options) {
//         int code = -1;
//         Throwable error = super.getError(request);
//         if (error instanceof org.springframework.cloud.gateway.support.NotFoundException) {
//             code = HttpStatus.NOT_FOUND.value();
//         }
//         return response(code, this.buildMessage(request, error));
//     }
//
//     @Override
//     protected RouterFunction<ServerResponse> getRoutingFunction(ErrorAttributes errorAttributes) {
//         return RouterFunctions.route(RequestPredicates.all(), this::renderErrorResponse);
//     }
//
//     @Override
//     protected int getHttpStatus(Map<String, Object> errorAttributes) {
//         return (int) errorAttributes.get("code");
//     }
//
//     private String buildMessage(ServerRequest request, Throwable ex) {
//         StringBuilder message = new StringBuilder("Failed to handle request [");
//         message.append(request.methodName());
//         message.append(" ");
//         message.append(request.uri());
//         message.append("]");
//         if (ex != null) {
//             message.append(": ");
//             message.append(ex.getMessage());
//         }
//         log.error("JsonExceptionHandler errorMessage {}", message.toString());
//         return Optional.ofNullable(ex).map(Throwable::getMessage).orElse("request error");
//     }
//
//     public static Map<String, Object> response(int status, String errorMessage) {
//         Map<String, Object> map = new HashMap<>(8);
//         map.put("code", status);
//         map.put("data", null);
//         map.put("message", errorMessage);
//         map.put("ok", false);
//         log.error("JsonExceptionHandler response {}", map);
//         return map;
//     }
// }
